package com.naiterui.ehp.bs.im.config;

import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * Mqtt连接池配置
 */
@Data
@NoArgsConstructor
public class MqttConnectionPoolConfig {

    /**
     * 是否启用自定义配置：<code>customSet</code>
     */
    private boolean customSet;
    /**
     * 最小的空闲连接数 ：<code>minIdle</code>
     */
    private int minIdle;
    /**
     * 最大的空闲连接数：<code>maxIdle</code>
     */
    private int maxIdle;
    /**
     * 最大连接数：<code>maxTotal</code>
     */
    private int maxTotal;
    /**
     * borrowObject返回对象时，是采用DEFAULT_LIFO
     */
    private boolean lifo;
    /**
     * 表示当borrow一个jedis实例时，最大的等待时间，如果超过等待时间，则直接抛出JedisConnectionException；
     * <code>maxWaitMillis</code>
     */
    private long maxWaitMillis;
    /**
     * 表示一个对象至少停留在idle状态的最短时间，然后才能被idle object evitor扫描并驱逐；
     * 这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义；
     * <code>maxWaitMillis</code>
     */
    private long minEvictableIdleTimeMillis;
    /**
     * 在minEvictableIdleTimeMillis基础上，加入了至少minIdle个对象已经在pool里面了。
     * 如果为-1，evicted不会根据idle time驱逐任何对象。
     * 如果minEvictableIdleTimeMillis>0，则此项设置无意义，且只有在timeBetweenEvictionRunsMillis大于0时才有意义；
     * <code>minEvictableIdleTimeMillis</code>
     */
    private long softMinEvictableIdleTimeMillis;
    /**
     * 表示idle object evitor每次扫描的最多的对象数：
     * <code>softMinEvictableIdleTimeMillis</code>
     */
    private int numTestsPerEvictionRun;
    /**
     * 设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数)：
     * <code>evictionPolicyClassName</code>
     */
    private String evictionPolicyClassName;
    /**
     * 在borrow一个连接实例时，是否提前进行alidate操作；如果为true，则得到的jedis实例均是可用的；
     * <code>testOnBorrow</code>
     */
    private boolean testOnBorrow;
    /**
     * 在return给pool时，是否提前进行validate操作：
     * <code>testOnReturn</code>
     */
    private boolean testOnReturn;
    /**
     * 如果为true，表示有一个idle object evitor线程对idle object进行扫描，如果validate失败，此object会被从pool中drop掉；
     * 这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义
     * <code>testWhileIdle</code>
     */
    private boolean testWhileIdle;
    /**
     * 表示idle object evitor两次扫描之间要sleep的毫秒数
     * <code>timeBetweenEvictionRunsMillis</code>
     */
    private int timeBetweenEvictionRunsMillis;
    /**
     * 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
     * <code>blockWhenExhausted</code>
     */
    private boolean blockWhenExhausted;

}
